home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Inverse 10
/
Inverse_10_2002-06-20_Oxygen_Side_A.d64
/
z assem 5 - pack
< prev
next >
Wrap
Text File
|
2023-02-26
|
11KB
|
644 lines
*= $1000
source = $2000
table = $5000
dest = $7000
sor = $fa
sqr = $fc
sim = $fe
ldx #0
stx bajt{CBM-@}b
jsr init{CBM-@}par
jsr reset{CBM-@}val
jsr multiply{CBM-@}3;adres koncowy
;---------------------------------------
a0
lda sor+1
cmp sour{CBM-@}e{CBM-@}hi
bne a00
lda sor
cmp sour{CBM-@}e{CBM-@}lo
bne a00
lda #$01 ;znacznik konca
sta bajt{CBM-@}b ;obiegu
lda string{CBM-@}l
beq *+10 ;pojedynczy bajt!
cmp usage{CBM-@}p
bcs b1 ;pakowanie
jsr inc{CBM-@}sor
jmp a11 ;nie oplaca sie!
; inc $d020
jsr inc{CBM-@}sor
jmp unnake ;koniec
a00
ldy #0
lda (sor),y
cmp store
bne a1
lda string{CBM-@}l
cmp #$ff
beq a1
inc string{CBM-@}l
jsr inc{CBM-@}sor
jmp a0
a1
sta store ;nowa wartosc!
jsr inc{CBM-@}sor
lda string{CBM-@}l
beq a0 ;pojedynczy bajt
cmp usage{CBM-@}p ;ilosc powtorzen
bcs b1 ;mozna pakowac!
a11
lda string{CBM-@}l ;nie oplaca sie
tax ;pakowac!
dex
txa
clc
adc sor
sta sor
bcc *+4
inc sor+1
lda #0
sta string{CBM-@}l
lda bajt{CBM-@}b ;juz po pakowaniu,
beq rtv ;liczniki musza sie
;zgadzac!!!
jsr dec{CBM-@}sor
rtv
lda sor+1
cmp sour{CBM-@}e{CBM-@}hi
bne continue
lda sor
cmp sour{CBM-@}e{CBM-@}lo
bne continue
; inc $d020 ;koniec!!!
jmp unnake
continue
jmp a0
;---------------------------------------
;procedura do pakowania bajtow
b1
lda sor
sec
sbc string{CBM-@}l
sta sor
bcs *+4
dec sor+1
lda sor
sec
sbc #1
sta sor
bcs *+4
dec sor+1
jsr stack{CBM-@}to
lda sour{CBM-@}e{CBM-@}lo
sec
sbc string{CBM-@}l
sta sour{CBM-@}e{CBM-@}lo
bcs *+5
dec sour{CBM-@}e{CBM-@}hi
jsr multiply{CBM-@}3
lda sqr
sta sim
lda sqr+1
sta sim+1
; lda sour{CBM-@}e{CBM-@}hi
; sta sim+1
; lda sour{CBM-@}e{CBM-@}lo ;skad (w dol)
; clc
; adc #3 ;wartosc etykiety
; sta sim ;tab{CBM-@}e(lo/hi) by
; bcc *+4 ;nic nie pominac
; inc sim+1 ;przy przenoszeniu
; lda #$00 ;dokad
; sta sor
; lda #$09
; sta sor+1
lda string{CBM-@}l ;parametr 'move'
sta bajt{CBM-@}a
jsr move{CBM-@}mem{CBM-@}sbc
jsr stack{CBM-@}from
; lda tab{CBM-@}e{CBM-@}lo
; clc
; adc #3
; sta tab{CBM-@}e{CBM-@}lo
; bcc *+5
; inc tab{CBM-@}e{CBM-@}hi
jsr multiply{CBM-@}3
ldy #0 ;adres+wartosc
lda sor ;do tabeli
sta (sqr),y
iny
lda sor+1
sta (sqr),y
iny
lda string{CBM-@}l
sta (sqr),y
lda bajt{CBM-@}b
bne k00
ldy #0
lda (sqr),y
sec
sbc #1
sta (sqr),y
bcs k00
iny
lda (sqr),y
sec
sbc #1
sta (sqr),y
k00
inc pack{CBM-@}lenght
bne *+5
inc pack{CBM-@}lenght+1
lda #0
sta string{CBM-@}l
lda sour{CBM-@}e{CBM-@}lo
sta $0e00
lda sour{CBM-@}e{CBM-@}hi
sta $0e01
lda store
sta $0f00
jsr inc{CBM-@}sor
lda sor+1
cmp sour{CBM-@}e{CBM-@}hi
bne next{CBM-@}one
lda sor
cmp sour{CBM-@}e{CBM-@}lo
bne next{CBM-@}one
lda bajt{CBM-@}b ;koniec tutaj _
bne ok{CBM-@} ;musi zostac
;wyrownany adres
ldy #0 ;w tabeli (zasto-
lda (sqr),y ;sowanie etykiety
clc ;jsr inc{CBM-@}sor)
adc #1
sta (sqr),y
bcc ok{CBM-@}
iny
lda (sqr),y
clc
adc #1
sta (sqr),y
ok{CBM-@}
; inc $d020 ;koniec!!!
jmp unnake
next{CBM-@}one
jmp a0
;+++++++++++++++
unnake
lda sqr ;koncowy adres
clc ;spakowanego progra-
adc #3 ;mu
sta sqr
bcc *+4
inc sqr+1
ldy #0
lda sour{CBM-@}e{CBM-@}lo
sta (sqr),y
iny
lda sour{CBM-@}e{CBM-@}hi
sta (sqr),y
iny
lda pack{CBM-@}lenght
sta (sqr),y
iny
lda pack{CBM-@}lenght+1
sta (sqr),y
iny
tya
clc
adc sqr
sta sqr
bcc *+4
inc sqr+1 ;adres konca pliku!
; inc $d020
; jmp *-3 ;koniec!
jmp kamela
;---------------------------------------
maxym
lda #$dd
sta pack{CBM-@}lenght
lda #$00
sta pack{CBM-@}lenght+1
lda #$da
sta sor
lda #$25
sta sor+1
lda #$75
sta sqr
lda #$28
sta sqr+1
kamela
;procedura do kasowania bajtow z tablicy
ldy #$00
sty bajt{CBM-@}b ;licznik
sty store ;wartosc byte{CBM-@}hi
sty string{CBM-@}l;ile lancuchow?
lda #$01 ;przesuniecie
sta bajt{CBM-@}a
lda sour{CBM-@}e{CBM-@}lo ;poczatek
sta sor
lda sour{CBM-@}e{CBM-@}hi
sta sor+1
lda sqr ;koniec
sta sim
lda sqr+1
sta sim+1
lda pack{CBM-@}lenght;czy wystapilo
bne fg0 ;pakowanie?
lda pack{CBM-@}lenght+1
bne fg0
lda #$00
sta (sim),y
rts ;koniec
fg0
jsr inc{CBM-@}sor
lda (sor),y
sta store
;+++++++++++
xt3
ldy #0
lda (sor),y
cmp store
bne new{CBM-@}one
; sta (sim),y
inc bajt{CBM-@}b ;licznik
jsr stack{CBM-@}to
jsr move{CBM-@}mem{CBM-@}sbc
jsr stack{CBM-@}from
jsr dec{CBM-@}sim
jsr inc{CBM-@}sor
jsr inc{CBM-@}sor
lda pack{CBM-@}lenght
sec
sbc #1
sta pack{CBM-@}lenght
bcs *+5
dec pack{CBM-@}lenght+1
lda pack{CBM-@}lenght
bne xt3
lda pack{CBM-@}lenght+1
bne xt3
;++++++++++++
lda bajt{CBM-@}b ;licznik konca
sta (sim),y
jsr inc{CBM-@}sim
inc string{CBM-@}l;ostatnia kolejka!
lda string{CBM-@}l
sta $0e00
sta (sim),y ;koniec!!!!!!
jsr inc{CBM-@}sim
rts
;+++++++++++++
new{CBM-@}one
tax
lda string{CBM-@}l
bne uj32 ;pierwszy raz
lda store ;stara wartosc
sta (sim),y
jsr inc{CBM-@}sim
uj32
txa
sta store ;nowa wartosc
inc string{CBM-@}l
lda bajt{CBM-@}b ;stary licznik
sta (sim),y
jsr inc{CBM-@}sim ;do nastepnego
lda #$00
sta bajt{CBM-@}b
jmp xt3
;+++++++++++++++++++++++++++++++++++++++
dec{CBM-@}sim
lda sim
sec
sbc #1
sta sim
bcs *+4
dec sim+1
rts
;+++++++++
inc{CBM-@}sim
lda sim
clc
adc #1
sta sim
bcc *+4
inc sim+1
rts
;+++++++++
multiply{CBM-@}3
; lda #<table
lda sour{CBM-@}e{CBM-@}lo
sta sqr
; lda #>table
lda sour{CBM-@}e{CBM-@}hi
sta sqr+1
lda pack{CBM-@}lenght
clc
adc sqr
sta sqr
bcc *+4
inc sqr+1
lda pack{CBM-@}lenght+1
clc
adc sqr+1
sta sqr+1
lda pack{CBM-@}lenght
clc
adc sqr
sta sqr
bcc *+4
inc sqr+1
lda pack{CBM-@}lenght+1
clc
adc sqr+1
sta sqr+1
lda pack{CBM-@}lenght
clc
adc sqr
sta sqr
bcc *+4
inc sqr+1
lda pack{CBM-@}lenght+1
clc
adc sqr+1
sta sqr+1
rts
;---------------------------------------
init{CBM-@}par
lda #<source
sta sor
lda #>source
sta sor+1
lda #<dest
sta sim
lda #>dest
sta sim+1
rts
;---------------------------------------
reset{CBM-@}val
lda #$2f ;przyklad!
sta sour{CBM-@}e{CBM-@}lo
lda #$43 ;przyklad!
sta sour{CBM-@}e{CBM-@}hi
lda #0
sta string{CBM-@}l
lda sour{CBM-@}e{CBM-@}lo
sta tab{CBM-@}s{CBM-@}lo
sta tab{CBM-@}e{CBM-@}lo
lda sour{CBM-@}e{CBM-@}hi
sta tab{CBM-@}s{CBM-@}hi
sta tab{CBM-@}e{CBM-@}hi
lda #<source
sta sour{CBM-@}s{CBM-@}lo
lda #>source
sta sour{CBM-@}s{CBM-@}hi
init{CBM-@}store
ldy #0
lda (sor),y
; eor #%00000001
sta store
rts
;---------------------------------------
move{CBM-@}mem{CBM-@}add
lda #$00 ;skad (w gore)
sta sim
lda #$09
sta sim+1
lda #$00 ;dokad
sta sor
lda #$0a
sta sor+1
lda #16 ;parametr 'move'
sta bajt{CBM-@}a
;
lda sor+1
sta sqr+1
lda sor
sec
sbc bajt{CBM-@}a
sta sqr
bcs *+4
dec sqr+1
ldy #0
j1
lda (sqr),y
sta (sor),y
jsr dec{CBM-@}sqr
jsr dec{CBM-@}sor
lda sor+1
cmp sim+1
bne j1
lda sor
cmp sim
bne j1
rts
;++++++++++
dec{CBM-@}sqr
lda sqr
sec
sbc #1
sta sqr
bcs *+4
dec sqr+1
rts
;++++++++++
dec{CBM-@}sor
lda sor
sec
sbc #1
sta sor
bcs *+4
dec sor+1
rts
;---------------------------------------
move{CBM-@}mem{CBM-@}sbc
; lda #$00 ;skad (w dol)
; sta sim
; lda #$0a
; sta sim+1
; lda #$00 ;dokad
; sta sor
; lda #$09
; sta sor+1
; lda #16 ;parametr 'move'
; sta bajt{CBM-@}a
j2
ldy bajt{CBM-@}a
lda (sor),y
ldy #0
sta (sor),y
jsr inc{CBM-@}sor
lda sor+1
cmp sim+1
bne j2
lda sor
cmp sim
bne j2
rts
;++++++++++
inc{CBM-@}sor
lda sor
clc
adc #1
sta sor
bcc *+4
inc sor+1
rts
;---------------------------------------
stack{CBM-@}to
lda sor
sta stack
lda sor+1
sta stack+1
lda sqr
sta stack+2
lda sqr+1
sta stack+3
lda sim
sta stack+4
lda sim+1
sta stack+5
rts
;---------------------------------------
stack{CBM-@}from
lda stack
sta sor
lda stack+1
sta sor+1
lda stack+2
sta sqr
lda stack+3
sta sqr+1
lda stack+4
sta sim
lda stack+5
sta sim+1
rts
;---------------------------------------
;zmienne srodowiskowe
string{CBM-@}l
.byte $00
store
.byte $00
bajt{CBM-@}a
.byte $00
bajt{CBM-@}b
.byte $00
;---------------------------------------
;zmienne globalne
pack{CBM-@}lenght
.byte $00,$00
usage{CBM-@}p
.byte $04
tab{CBM-@}s{CBM-@}lo
.byte $00
tab{CBM-@}s{CBM-@}hi
.byte $00
tab{CBM-@}e{CBM-@}lo
.byte $00
tab{CBM-@}e{CBM-@}hi
.byte $00
sour{CBM-@}s{CBM-@}lo
.byte $00
sour{CBM-@}s{CBM-@}hi
.byte $00
sour{CBM-@}e{CBM-@}lo
.byte $00
sour{CBM-@}e{CBM-@}hi
.byte $00
stack
.byte $00,$00,$00,$00,$00,$00
.byte $00,$00,$00,$00,$00,$00